home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / psizzl / output.psizzl < prev    next >
Text File  |  1992-08-26  |  7KB  |  201 lines

  1. % OUTPUT PSIZZL - output routine for publications
  2. % singlesided    : page numbers in fixed location
  3. % doublesided    : alternating page numbers at left/right
  4. % quadsided      : alternating page numbers at foot and top
  5. % nopagenumbers  : disables all pagenumbering
  6. % bottomcentered : bottom centered page numbers
  7. % topcentered    : top centered page numbers
  8. % bottomnumbers  : bottom outside page numbers
  9. % topnumbers     : top outside page numbers
  10. \newdimen\evenoffset\newdimen\oddoffset
  11. % Even and odd leaves of output are shifted by these respective amounts
  12. % in order to have a proper binding margin.
  13. \newcount\p@gecount
  14. \def\pageset#1{\p@gecount#1}%
  15. \def\p@geclear{\global\p@gecount\@ne}\adddef\fmtreset{\p@geclear}%
  16. \def\p@gefront{\global\p@gecount\m@ne}\adddef\resd@c{\p@gefront}%
  17. \newcount\le@f\le@f=\@ne
  18. \newcount\p@geroman\p@geroman\m@ne
  19. \newif\iffr@nt
  20. \newif\ifdoubleside
  21. \newif\ifquadside
  22. \def\singlesided{\quadsidefalse \doublesidefalse}%
  23. \def\doublesided{%
  24.    \quadsidefalse\doublesidetrue%\evenoffset.2in\oddoffset-.05in
  25.    }%
  26. \def\quadsided{%
  27.    \quadsidetrue\doublesidefalse%\evenoffset.2in\oddoffset-.05in
  28.    \let\endleaf\endle@f
  29.    }%
  30. \newif\ifp@genumberleft
  31. \newif\ifp@genumbertop
  32. \newif\ifp@genumbernone
  33. \newif\ifp@genumbercenter
  34. \adddef\resd@c{%
  35.    \let\frontnumbers=\bottomcentered\let\bodynumbers=\topoutside
  36.    }%
  37. \def\nopagenumbers{\p@genumbernonetrue}%
  38. \def\bottomcentered{\p@genumbertopfalse\p@genumbercentertrue}%
  39. \def\topcentered{\p@genumbertoptrue\p@genumbercentertrue}%
  40. \def\bottomoutside{\p@genumbertopfalse\p@genumbercenterfalse}%
  41. \def\topoutside{\p@genumbertoptrue\p@genumbercenterfalse}%
  42. \def\p@gehead{\ifp@genumbertop\p@genumberline\else\p@genumbernull\fi}%
  43. \def\p@gefoot{\ifp@genumbertop\p@genumbernull\else\p@genumberline\fi}%
  44. \def\b@ndp@ge#1#2{\ifp@genumberleft{#2}\else{#1}\fi}%
  45. \def\p@gebanner#1#2#3{%
  46.    \line{{\rm\lapline{\b@ndp@ge{#1}{#3}}{#2}{\b@ndp@ge{#3}{#1}}}}%
  47.    }%
  48. \def\lapline#1#2#3{\rlap{#1}\hfil#2\hfil\llap{#3}}%
  49. %
  50. % set up the defaults
  51. %
  52. \singlesided\topoutside % default pagenumbering format
  53. %
  54. \newinsert\margin\dimen\margin\maxdimen
  55. % This pagenumber is same as in PLAIN but does not impose \tenrm
  56. \gdef\p@genumber{{\bf\numorroman\p@gecount}}%
  57. \def\p@genumberline{%
  58.    \iffr@nt
  59.       \p@genumbernull
  60.       \else
  61.       \ifletter\p@genumberletter\else
  62.          \ifm@mo\p@genumbermemo\else
  63.             \p@genumberpaper
  64.             \fi
  65.          \fi
  66.       \fi
  67.    }%
  68. \def\p@genumbernull{\vbox to \z@{}}%
  69. \def\makep@genumber{% output.psizzl
  70.    \ifnum\p@gecount<\z@\frontnumbers\else\bodynumbers\fi
  71.    \ifdoubleside
  72.       \ifodd\pageno\hoffset\evenoffset\p@genumberleftfalse
  73.          \else\hoffset\oddoffset\p@genumberlefttrue
  74.          \fi
  75.       \fi
  76.    \ifquadside
  77.       \ifodd\pageno\p@genumberlefttrue\else\p@genumberleftfalse\fi
  78.       \ifodd\le@f
  79.          \p@genumbertopfalse\voffset\evenoffset
  80.          \else\p@genumbertoptrue\voffset\oddoffset
  81.          \fi
  82.       \fi
  83.    \ifp@genumbernone\fr@nttrue\fi
  84.    \count\@ne\number\p@gecount
  85.    %\count\tw@\number\le@f
  86.    }%
  87. \def\p@gecontents{%
  88.    \ifvoid\margin\else
  89.       \p@gebanner{}{}{%
  90.          \hbox to\z@{\b@ndp@ge{}{\hss}%
  91.             \hbox{\vbox to \z@{\box\margin\vss}}\b@ndp@ge{\hss}{}%
  92.             }%
  93.          }%
  94.       \fi
  95.    \ifvoid\topins\else\unvbox\topins\fi
  96.    \unvbox\@cclv
  97.    \ifvoid\footins\else\vskip\skip\footins\vskip-0.68ex
  98.       \hrule width.25\hsize\vskip1.82ex
  99.       \unvbox\footins
  100.       \fi
  101.    \ifr@ggedbottom\vfill\fi
  102.    }%
  103. \def\p@gebox#1{%
  104.    \vbox{% \boxmaxdepth=\the\maxdepth\offinterlineskip
  105.       %\offinterlineskip
  106.       \p@gehead\vskip\normalbaselineskip
  107.       \c@lumnbox{#1}%
  108.       \vskip\normalbaselineskip\p@gefoot
  109.       }%
  110.    }%
  111. \def\c@lumnbox#1{%
  112.    \vbox to \vsize{#1}%
  113.    }%
  114. \def\bumple@fnumber{% counter for total leaves. Quad: Two pages per leaf
  115.    \ifodd\pageno\global\advance\le@f\@ne\fi
  116.    }%
  117. \def\bumpp@genumber{%
  118.    \iffr@nt\global\fr@ntfalse\fi
  119.    \ifnum\p@gecount<\z@ % register for the page label `page number'
  120.       \global\advance\p@gecount\m@ne
  121.       \global\p@geroman=\number\p@gecount
  122.       \else\global\advance\p@gecount\@ne
  123.       \fi
  124.    \global\advance\pageno\@ne % counter for total pages
  125.    }%
  126. \def\fmtoutput#1{%
  127.    \makep@genumber\l@twrite\shipout#1\bumpp@genumber\bumple@fnumber
  128.    }%
  129. \def\eject@ns{%
  130.    \ifnum\outputpenalty>-20000 \else\dosupereject\fi
  131.    }%
  132. \output{\fmtoutput{\p@gebox{\p@gecontents}}\eject@ns}%
  133. \newdimen\pagesize\pagesize\hsize
  134. \newcount\c@lumncount\newcount\c@lumntotal
  135. \def\gutter{\thinvrule}%
  136. \def\pageline{\hbox to\pagesize}%
  137. \newbox\c@lumni\newbox\c@lumnii\newbox\c@lumniii
  138. \newbox\c@lumniv\newbox\c@lumnv
  139. \def\@@nd{\endmulticolumn\@nd}\let\@nd\end
  140. \def\beginmulticolumn#1{% arg = number of columns per page < 6
  141.    \@ndmulticolumn
  142.    \topskip\z@\r@ggedbottomtrue
  143.    \c@lumntotal#1\c@lumncount\c@lumntotal
  144.    \pagesize\hsize\let\g@tter\gutter % save \gutter where it can't go bad
  145.    \setbox\z@\hbox{\g@tter}\advance\hsize\wd\z@
  146.    \divide\hsize\number\c@lumntotal\advance\hsize-\wd\z@ % new \hsize
  147.    \output{\multic@lumn{\c@lumnbox{\p@gecontents}}\eject@ns}%
  148.    }%
  149. \def\@ndmulticolumn{%
  150.    \endpage\supereject
  151.    \message{\string\c@lumncount=\number\c@lumncount}%
  152.    \loop\ifnum\c@lumncount<\c@lumntotal\null\endpage\repeat
  153.    \hsize\pagesize\c@lumntotal\@ne
  154.    \let\markl\empty\let\markr\empty\let\marko\empty % null these, too
  155.    }%
  156. \def\endmulticolumn{%
  157.    \mark{}\@ndmulticolumn
  158.    }%
  159. \def\multic@lumn#1{\rm % switch back just in case
  160.    \def\l@toutput{%
  161.       \l@twrite\let\leftline\z@\let\bf\z@
  162.       \let\allmark\z@\let\nomark\z@\let\inimark\z@
  163.       }%
  164.    \ifx\markl\empty
  165.       {\l@toutput\xdef\markl{\firstmark}}%
  166.       {\let\allmark\relax\let\nomark\relax\let\inimark\relax
  167.          \setbox\z@\hbox{\titleline\markl}%
  168.          \setbox\@ne\hbox{\titleline\empty}%
  169.          \ifdim\wd\z@=\wd\@ne
  170.          {\l@toutput\xdef\markl{\botmark}}%
  171.             \fi
  172.          }%
  173.       %\message{\string\markl=\markl.}%
  174.       \fi
  175.    \ifcase\c@lumncount
  176.       \or\c@lumnformat{#1}\or\s@tb@x\c@lumni#1\or\s@tb@x\c@lumnii#1%
  177.       \or\s@tb@x\c@lumniii#1\or\s@tb@x\c@lumniv#1\or\s@tb@x\c@lumnv#1%
  178.       \fi
  179.    \global\advance\c@lumncount\m@ne
  180.    % if the current heading is not yet finished,
  181.    % insert the column header for this heading into the vertical list
  182.    \botmark
  183.    }%
  184. \def\g@tb@x#1{\ifdim\wd#1=\z@\else\box#1\g@tter\fi}%
  185. \def\s@tb@x{\global\setbox}%
  186. \def\c@lumnformat#1{%
  187.    \fmtoutput{%
  188.       \vbox{%
  189.          \p@gehead
  190.          {\l@twrite
  191.             \pageline{%
  192.                \g@tb@x\c@lumnv\g@tb@x\c@lumniv\g@tb@x\c@lumniii
  193.                \g@tb@x\c@lumnii\g@tb@x\c@lumni#1\hfil
  194.                }%
  195.             }%
  196.          \p@gefoot
  197.          }%
  198.       \global\advance\c@lumncount\c@lumntotal
  199.       }%
  200.    }%
  201.